package com.casa_apoio.estoque.controller;

import com.casa_apoio.estoque.mode.dao.FornecedorDAO;
import com.casa_apoio.estoque.mode.entity.Fornecedor;
import com.casa_apoio.util.FacesContextUtil;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

@ManagedBean
@ViewScoped
public class MbFornecedor implements Serializable {

    private Fornecedor fornecedor;
    private List<Fornecedor> fornecedores;
    private String pesquisaFornecedor;

    private FornecedorDAO fornecedorDAO() {
        FornecedorDAO<Fornecedor> fornecedorDAO = new FornecedorDAO<Fornecedor>(Fornecedor.class, FacesContextUtil.getRequestSession());
        return fornecedorDAO;
    }

    public String salvaFornecedor() {
        String cnpjCpf = fornecedor.getCnpjCpf();
        if (fornecedor.getIdFornecedor() == null || fornecedor.getIdFornecedor() < 1) {
            fornecedores = fornecedorDAO().verificaFornecedorCadastrado(cnpjCpf);
            if (fornecedores.size() > 0) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Fornecedor ja cadastrado com essa numeração!", ""));
                return null;
            } else {
                fornecedorDAO().salvar(fornecedor);
                fornecedor = new Fornecedor();
                fornecedores = fornecedorDAO().verificaFornecedorCadastrado(cnpjCpf);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Fornecedor cadastrado com sucesso!", ""));
                return null;
            }
        } else {
            fornecedorDAO().atualizar(fornecedor);
            fornecedor = new Fornecedor();
            fornecedores = fornecedorDAO().verificaFornecedorCadastrado(cnpjCpf);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Fornecedor alterado com sucesso!", ""));
            return null;
        }

    }

    public void pesquisarFornecedor() {
        if (!pesquisaFornecedor.equals("")) {
            fornecedores = fornecedorDAO().pesquisaFornecedorNomeFantazia(pesquisaFornecedor);
            if (fornecedores.size() < 1) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Fornecedor não encontrado, verifique o nome fantasia!", ""));
            }
            pesquisaFornecedor = "";
        }
    }

    public void pesquisarFornecedorByExample(ActionEvent ev) {
        System.out.println(">>>>>>>>>>>>>> Nome fantasia " + fornecedor.getNomeFantasia() + " CPF " + fornecedor.getCnpjCpf());
        fornecedores = fornecedorDAO().pesquisaFornecedorByExample(fornecedor);
        if (fornecedores.size() < 1) {
            for (Fornecedor f : fornecedores) {
                System.out.println(">>>>>>> Fornecedor = " + f.getNomeFantasia() + " Cidade = " + f.getCidade().getCidade());
            }
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Fornecedor não encontrado, verifique o nome fantasia!", ""));
        }
        //} else {
        //FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Digite nome fantasia ou cidade para pesquisa", ""));
        // }
    }

    public String alterarFornecedor(Fornecedor fornecedor) {
        this.fornecedor = (Fornecedor) fornecedorDAO().getEntity(fornecedor.getIdFornecedor());
        if (this.fornecedor == null) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Fornecedor não encontrado, verifique o codigo!", ""));
        }
        return null;
    }

    public String cancelaAlteracao() {
        fornecedor = new Fornecedor();
        return "/restrict/estoque/cadastroFornecedor.faces";
    }

    public Fornecedor getFornecedor() {
        if (fornecedor == null) {
            fornecedor = new Fornecedor();
        }
        return fornecedor;
    }

    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor = fornecedor;
    }

    public List<Fornecedor> getFornecedores() {
        return fornecedores;
    }

    public void setFornecedores(List<Fornecedor> fornecedores) {
        this.fornecedores = fornecedores;
    }

    public String getPesquisaFornecedor() {
        return pesquisaFornecedor;
    }

    public void setPesquisaFornecedor(String pesquisaFornecedor) {
        this.pesquisaFornecedor = pesquisaFornecedor;
    }

}
